#pragma once

/// <summary>
/// CCDemo: Main application class which instantiates the various systems
/// <summary>

/**	
  * Author: Dane Bulat and Michael Leviston
  * Created: 06/2013
  * Last Modified: 01/07/2013
  * Version: v1.0
  */

// Includes
#include "common/d3dApp.h"
#include "common/d3dx11effect.h"
#include "common/MathHelper.h"
#include "common/xnacollision.h"

// Import Character-Camera Game Framework.
#include "ccframework.h"
using namespace std;

// Class Definition
class CCDemo : public D3DApp
{
public:
//==============================
// Constructors / Destructors
//==============================

  /**
	* Constructor
	* @param HINSTANCE - Application Instance Handle
	*/
	CCDemo(HINSTANCE hInstance);

	/// Default Destructor
	~CCDemo();

//==============================
// Initialise
//==============================

	/// Initialise instance
	bool Init();

//==============================
// Shutdown
//==============================

	/// Shutdown Method - Safely shutdown and delete objects
	void Shutdown();

//==============================
// Update
//==============================

	/// OnResize - Update window on resize
	void OnResize();

	/// UpdateScene - Update the player and all of the objects in the scene
	void UpdateScene(float dt);

	/// DrawScene - Draw the player and scene objects
	void DrawScene();

private:
	/// Init_shaders - Create and initialise shaders
	void Init_shaders();	

	/// Init_lights - Create and initialse lights
	void Init_lights();	
	
private:
	Camera*				m_Camera;				///< Camera

	BasicShader*		m_BasicShader;			///< Basic shader.
	InstancedShader*	m_InstancedShader;		///< Basic Instanced shader.
	DirectionalLight	m_dirLights[3];			///< Directional lights.

	AssetManager*		m_AssetManager;			///< Asset Manager
	PlayerInfo*			m_PlayerInfo;			///< Player Info
	SysInput*			m_SysInput;				///< Input System
};